#include <stdbool.h>
#include "stdio.h"
#include "limits.h"
#include "string.h"

void testCreate() {
    // 数组是连续内存空间
    int arr[10];
    printf("数组的内容：");
    for (int i = 0; i < 10; i++) {
        printf("%d,", arr[i]);
    }
    printf("\n");
    /*
     * 输出结果 ： 13024,10,48,0,1168,10,832198848,32760,-13008,7,
     * 数组没有初始化，所以这些值是随机的（这是因为C不会清除内存，只是使变量引用失效）
     */
    printf("数组的字节长度为：%zd\n", sizeof(arr));
    // 创建
    int arr2[5] = {22, 37, 90, 48, 95};
    int arr3[] = {22, 37, 90, 48, 95};
    int arr4[3] = {0}; // 0填充
    //指定位置赋值
    int arr5[15] = {[2] = 10, [5] = 20, [14] = 30};  //非角标2、5、14的位置自动赋值为0
}

void testCopy() {
    // 数组复制
    int arr6[5] = {1, 2, 3, 4, 5};
    int arr7[5];
    // 第一种方案
    for (int i = 0; i < sizeof(arr6) / sizeof(arr6[0]); i++) {
        arr7[i] = arr6[i];
    }
    printf("数组复制的结果为：");
    for (int i = 0; i < sizeof(arr7) / sizeof(arr7[0]); i++) {
        printf("%d,", arr7[i]);
    }

    // 第二种方案使用 memcpy 函数复制数组 a 到数组 b
    // 参数： 目标，源，复制的长度
    memcpy(arr7, arr6, sizeof(arr6));
    printf("数组复制的结果为：");
    for (int i = 0; i < sizeof(arr7) / sizeof(arr7[0]); i++) {
        printf("%d,", arr7[i]);
    }
}
// 字符串
void testStr(){
    // char型数组与字符串
    // 在字符串结尾，C 语言会自动添加一个`'\0' `的转义字符作为字符串结束的标志，所以字符数组也必须以 '\0'字符结束。
    // 这是字符数组
    char arr8[] = {'a', 'b', 'c', 'd'};
    char nation[10] = {"China"};

    // 这是字符串 ，因为 是以'\0'为最后一个字符元素结束
    char str[] = {'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '\0','h', 'e', 'l', 'l', 'o'};
    char str1[] = {"hello world"};
    char str2[12] = "hello world";
    // strlen() 函数计算的是字符串中 \0（空字符）之前的字符个数，不包括结尾的 \0
    printf("str长度（使用strlen函数） ：%lu , str1长度 ：%lu , str2长度 ：%lu\n", strlen(str),strlen(str1),strlen(str2)); // 最后的'\0' 未计入长度
    printf("str长度（使用sizeof函数） ：%lu , str1长度 ：%lu , str2长度 ：%lu\n", sizeof(str),sizeof(str1),sizeof(str2));
}
int main() {
    // testCreate();
    // testCopy();
    // testStr();
}